package com.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.DefaultHttpParams;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class UtilsWeb {
	private static String apiUrl = "http://api.taobao.com/apidoc/api.htm?path=cid:1-apiId:1";

	public static void main(String[] args) throws HttpException, IOException {
		String webHtml = UtilsWeb.getWebHtml(apiUrl);
		System.out.println(webHtml);
	}

	public static String getWebHtml(String url) throws HttpException, IOException {
//		System.out.println("url: " + url);
		StringBuffer sb = new StringBuffer();

		// 构造HttpClient的实例
		HttpClient httpClient = new HttpClient();
		// 创建GET方法的实例
		GetMethod getMethod = new GetMethod(url);
		// 使用系统提供的默认的恢复策略
		getMethod.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
		getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
		try {
			// 执行getMethod
			int statusCode = httpClient.executeMethod(getMethod);
			if (statusCode != HttpStatus.SC_OK) {
				System.err.println("Method failed: " + getMethod.getStatusLine());
			}
			// 读取内容
//			byte[] responseBody = getMethod.getResponseBody();
			// 处理内容
//			sb = new String(responseBody);
			
			InputStream in = getMethod.getResponseBodyAsStream();
			byte[] b = new byte[300];
			int i = 0 ;
			while( (i = in.read(b)) != -1){
				sb.append(new String(b, 0, i, "utf-8"));
			}
			
		} catch (HttpException e) {
			// 发生致命的异常，可能是协议不对或者返回的内容有问题
			System.out.println("Please check your provided http address!");
			e.printStackTrace();
		} catch (IOException e) {
			// 发生网络异常
			e.printStackTrace();
		} finally {
			// 释放连接
		//	getMethod.releaseConnection();
		}

		return sb.toString();
	}

	/**
	 * 使用 GET 方式提交数据
	 * 
	 * @return
	 */

	// private static HttpMethodgetGetMethod() {
	// return new GetMethod("/simcard.php?simcard=1330227");
	// }

	/**
	 * 使用 POST 方式提交数据
	 * 
	 * @return
	 */

	// private static HttpMethod getPostMethod() {
	// PostMethod post = new PostMethod("/simcard.php");
	// NameValuePair simcard = new NameValuePair("simcard", "1330227");
	// post.setRequestBody(new NameValuePair[] { simcard });
	// return post;
	// }
}
